/**这里是微信支付的工具类文件 */

import request from "./request";
import { updateOrderStatusApi } from "@/api/OrderPay";

/**
 * 注意请求参数格式，必须要按照这个格式来，不然语法检查过不了
 * 支付状态啥的在后端预支付的时候写
 *  const payParams = {
    couponId: couponId.value, //优惠券id 有就按时填写，没有就写-1 后端有处理
    carId: carId.value, //汽车id 有就按时填写，没有填写-1 后端有处理
    payPrice: 23, //这个是支付的价格，填写真实支付价格 
    serviceIds: [1,2,3], // 订单的服务id,也就是该订单选了服务详情表中的哪些订单
    serviceTypeID: 1, // 服务类型id 1-洗车 2-维修 3-保养 
    serviceImg: "", // 可选参数 有就传递 没就默认值
  };
 */
export async function wxPay(payParams) {
  //1. 获取当前登录用户的code
  const loginRes = await wx.login({
    timeout: 10000,
  });
  console.log("登录结果:", loginRes);
  //2. 向微信后端发送请求获取openid
  const openidRes = await uni.request({
    url: "https://api.weixin.qq.com/sns/jscode2session",
    data: {
      appid: "wx18ac00cf04b30715",
      secret: "aa23ff50de810c9116639e1ddbe6a19a",
      js_code: loginRes.code,
      grant_type: "authorization_code",
    },
    header: {
      Accept: "application/json",
      "Content-Type": "application/json",
      "X-Requested-With": "XMLHttpRequest",
    },
    method: "GET",
  });
  console.log("openID接收到数据:", openidRes);

  //3. 发起预支付请求 获取预支付响应参数
  payParams.openId = openidRes.data.openid;
  console.log("添加过openid后的payParams:", payParams);
  const res = await request({
    url: "/yueyang/wxpay/prepay",
    method: "post",
    data: payParams,
  });
  //控制台打印响应结果
  console.log("响应结果:", res);
  console.log("响应结果状态码:", res.code);
  console.log("响应结果数据:", res.data);
  //3.1 响应成功 发起支付请求 进行支付
  if (res.code == 200) {
    //表示获取到了微信官方预支付请求
    //定义 接收响应数据
    const prepayData = res.data;
    console.log("预支付请求参数:", prepayData);
    //获取订单id
    const orderId = prepayData.orderId;
    console.log("插入预支付数据后返回的订单id:", orderId);
    //TODO 这里我将订单id存储到本地 进行核销的时候自己拿
    uni.setStorageSync("orderId", orderId);

    //3.2 设置订单的更新状态参数;注意这里只有支付成功的状态和支付失败的状态更改
    //如果支付成功了并且核销码也消费掉了 自己拉后端接口更新订单状态
    //拉前端OrderPay.js提供的接口也可更新状态
    const updateParams = {
      orderStatus: 3, //0待支付，1已取消，2已退款 3 待核销 4已完成
      payStatus: 1, //0未支付，1已支付
      verifyCodeImg: "", //核销码图片 没啥用
      //支付时间的格式 2025-11-18 22:55:20
      payTime: "", //支付时间 这里不要填写，傻逼玩意，后端自动生成当前付费时间即可
    };

    //3.3. 向微信官方发起支付请求
    wx.requestPayment({
      timeStamp: prepayData.timeStamp,
      nonceStr: prepayData.nonceStr,
      package: prepayData.package,
      signType: prepayData.signType,
      paySign: prepayData.paySign,
      success: async (result) => {
        uni.showToast({ title: "支付成功" });
        //修改订单状态 已支付
        updateParams.orderStatus = 3;
        updateParams.payStatus = 1;
        const res = await updateOrderStatusApi(updateParams, orderId);
        console.log("支付成功，修改订单状态结果:", res);

        //3.4 支付成功后 删除本地存储的 carId、couponId、discountPrice
        uni.removeStorageSync("carId");
        uni.removeStorageSync("couponId");
        uni.removeStorageSync("discountPrice");

        //3.5 支付成功 关闭当前页面 跳转到支付成功页面 携带orderId
        uni.redirectTo({ url: `/pages/PaySuccess/index?orderId=${orderId}` });
      },
      fail: async () => {
        uni.showToast({ title: "支付失败" });
        //修改订单状态 已取消
        updateParams.orderStatus = 1;
        updateParams.payStatus = 0;
        const res = await updateOrderStatusApi(updateParams, orderId);
        console.log("支付失败，修改订单状态结果:", res);
      },
      complete: () => {},
    });
  }
}
